import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";

# Docker Compose 快速部署

## 前言

本章节中只描述如何做到**最快速**地搭建一个 SDUOJ，不建议长期用作生产。

:::danger 注意
SDUOJ 尚未发布第一个稳定版本，对于生产用途 SDUOJ 开发者建议大家持观望态度。
:::

## 先决条件

### 操作系统

- Linux（已测试：Ubuntu 20.04, Ubuntu 22.04, Debian 10）
- macOS（已测试：Ventura 13.4.1）
- ~~Windows~~（不支持！）

### 必备软件

- [git](https://git-scm.com/)
- [docker](https://docs.docker.com/get-docker/)：版本大于等于 `23.0.2`
- [docker-compose-plugin](https://docs.docker.com/compose/install/linux/)：版本大于等于 `2.17.2`

可使用以下命令验证：

```shell
git version
docker -v
docker compose version
```

## 安装必备软件（在 Ubuntu、Debian 系统）

> 如果您的环境已装有，请跳过这一步

<Tabs>
  <TabItem value="proxy" label="使用镜像" default>

```shell
export DOWNLOAD_URL="https://mirrors.cernet.edu.cn/docker-ce"
sudo apt-get update \
  && sudo apt-get install -qq -y curl git \
  && curl -fsSL https://get.docker.com/ | sudo -E sh
```

  </TabItem>
  <TabItem value="noproxy" label="无需镜像">

```shell
sudo apt-get update \
  && sudo apt-get install -qq -y curl git \
  && curl -fsSL https://get.docker.com/ | sudo -E sh
```

  </TabItem>
</Tabs>

## 单机部署（伪分布式，All-in-One）

:::tip 尝鲜机器建议

- 在云服务厂商使用**按量计费模式**开启一个云服务器，16G 或以上大小的内存
- 虚拟机上安装一个 Linux 发行版（强烈推荐 Ubuntu 22.04）

:::

如果您只是打算尝试**简单地**部署一个 SDUOJ，对其进行探索和尝鲜的话，执行以下指令即可：

- 拉取 `sduoj-deploy` 项目代码

```shell
git clone https://github.com/SDUOJ/sduoj-deploy.git
```

- 进入 `sduoj-deploy` 项目目录

```shell
cd sduoj-deploy
```

- 执行 `docker compose`（注意不是 `docker-compose`）启动编排好的各个服务

```shell
sudo docker compose up
```

- 在 URL 中访问你的服务器 IP 即可，例如：`http://127.0.0.1:80/`，其中 `127.0.0.1` 换成你的服务器 IP

一些初始账号如下，安全起见请注意修改：

- SDUOJ 的初始账号密码分别为 `superadmin`、`123456`，注意修改。
- Nacos 的初始账号密码分别为 `sduoj`、`sduoj`，注意修改。
- MySQL 的初始账号密码分别为 `sduoj`、`sduoj`，注意修改。

:::warning 注意
数据库、消息队列、Nacos 服务的端口是暴露的，如果是在公有云上进行临时生产，建议配置**网络安全组**，仅暴露需要的 22、80 等端口。在自己的物理服务器上同理。
:::
